Preserve `package.metadata` when packaging
authorAlex Crichton <alex@alexcrichton.com>
Wed, 14 Jun 2017 14:56:40 +0000 (07:56 -0700)
committerAlex Crichton <alex@alexcrichton.com>
Wed, 14 Jun 2017 14:57:00 +0000 (07:57 -0700)
Now that we use Serde this is actually trivial to implement!

Closes #4142

src/cargo/util/toml.rs
tests/package.rs

index 57fe72abb5a63c5b177e03bf46b87a0b13c61d17..34ab86a314327dcc6d4e7c9cef7356a353239fc3 100644 (file)
@@ -109,9 +109,7 @@ pub fn to_manifest(contents: &str,
     let manifest: TomlManifest = serde_ignored::deserialize(root, |path| {
         let mut key = String::new();
         stringify(&mut key, &path);
-        if !key.starts_with("package.metadata") {
-            unused.insert(key);
-        }
+        unused.insert(key);
     })?;
 
     let manifest = Rc::new(manifest);
@@ -459,6 +457,7 @@ pub struct TomlProject {
     #[serde(rename = "license-file")]
     license_file: Option<String>,
     repository: Option<String>,
+    metadata: Option<toml::Value>,
 }
 
 #[derive(Deserialize, Serialize)]
index 1777235e1cfd9083c33f6d2dbf16d54da1165264..d54fdc2375a5e9dc3e95d2965347dbec4f5cdca4 100644 (file)
@@ -604,6 +604,9 @@ fn generated_manifest() {
             license = "MIT"
             description = "foo"
 
+            [project.metadata]
+            foo = 'bar'
+
             [workspace]
 
             [dependencies]
@@ -652,6 +655,9 @@ authors = []
 exclude = ["*.txt"]
 description = "foo"
 license = "MIT"
+
+[package.metadata]
+foo = "bar"
 [dependencies.bar]
 version = "0.1"
 "#));